package kr.ac.ssu.ailab.Model.Data;

import java.awt.Point;

/**
 * 그래프를 구성하고 있는 Edge 클래스
 * @author Rivers
 */
public class Edge
{
	private Point startPoint;
	private Point finishPoint;

	/**
	 * 생성자
	 * @param startPoint
	 * @param finishPoint
	 */
	public Edge(Point startPoint, Point finishPoint)
	{
		this.startPoint = startPoint;
		this.finishPoint = finishPoint;
	}

	
	/**
	 * Edge 의 시작점을 get 하는 메소드
	 * @return
	 */
	public Point getStartPoint()
	{
		return startPoint;
	}

	/**
	 * Edge 의 목표점을 get 하는 메소드
	 * @return
	 */
	public Point getFinishPoint()
	{
		return finishPoint;
	}

	/**
	 * Edge 의 시작점을 set 하는 메소드
	 * @param p
	 */
	public void setStartPoint(Point p)
	{
		this.startPoint = p;
	}

	/**
	 * Edge 의 목표점을 set 하는 메소드
	 * @param p
	 */
	public void setFinishPoint(Point p)
	{
		this.finishPoint = p;
	}

	/* 
	 * 
	 * Graph 의 자료구조가 HashMap 으로 구성되어 있는데
	 * 이때 Key 값을 비교시에 인스턴스의 equal 메소드와 hashCode메소드가 같아야 
	 * 같은 키값으로 인식 하기에  오버라이드하여 구현한 메소드 부분입니다.  
	 */
	public String toString(){
		return startPoint+" , "+finishPoint;
	}
	public boolean equals(Object object)
	{
		if (object instanceof Edge)
		{
			Edge cEdge = (Edge) object;
			if (this.startPoint == cEdge.getStartPoint()
					&& this.finishPoint == cEdge.getFinishPoint())
			{
				System.err.println("�½��ϴ�");
				return true;
			}
			System.out.println(" THIS START POINT : " + this.startPoint + ", Finish Point"
					+ this.finishPoint);
			System.out.println(" CEdge Point : " + cEdge.getStartPoint() + ", Finish Point"
					+ cEdge.getFinishPoint());
			System.err.println("��ǥ ���� �ٸ��ϴ�.");
			return false;
		}
		return false;
	}

	public int hashCode()
	{
		String code = "" + startPoint + finishPoint;
		return code.hashCode();
	}
}